package fiuba.algo3.algoThieft.modelo;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

public class Persistor {

	public void deserializarDesdeElArchivo(Deserializable deserializable, String nombreDelArchivo) throws ParserConfigurationException, SAXException, IOException {
		File archivo = new File(nombreDelArchivo);
		DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder dBuilder;
		dBuilder = dbFactory.newDocumentBuilder();		
		Document doc = dBuilder.parse( archivo );
		doc.getDocumentElement().normalize();
		deserializable.deserializar(doc);
	}

	public void guardarEn(Persistible persistible, String nombreDelArchivo) throws ParserConfigurationException, TransformerException {
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();
		Document doc = db.newDocument();
		Element objetoSerializado = persistible.serializar(doc);
		doc.appendChild(objetoSerializado);
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		DOMSource source = new DOMSource(doc);
		File archivoDestino = new File(nombreDelArchivo);
		StreamResult result = new StreamResult(archivoDestino);
		transformer.transform(source, result);
		
	}
	
	
	
	

}
